home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 371_01 / exampl1.c < prev    next >
Text File  |  1991-12-24  |  5KB  |  208 lines

  1. /***************************************************************************
  2. * EXAMPL1.C
  3. * This example demonstrates programming in the structured paradigm under
  4. * Windows 3.0. Note the absence of the GetMessage, DispatchMessage loop.
  5. * The program counts to 1 million in any of five different windows. The
  6. * count moves from window to window every 2 seconds. If the user clicks
  7. * on the button associated with any of the windows, the count resumes
  8. * from that window. The user is requested to give an ID and password
  9. * at the start, to demonstrate some additional functionality.
  10. **************************************************************************/
  11.  
  12. #include <Windows.h>
  13. #include "WinDosIO.h"
  14.  
  15.  
  16. long far pascal WndProc(HWND, WORD, WORD, LONG);
  17.  
  18. short ticks;
  19. short currentHandle;
  20. HWND handle[5];
  21. HWND button[5];
  22. HWND idWindow;
  23. HANDLE hInst;
  24.  
  25.  
  26. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  27.            LPSTR lpszCmdline, int cmdshow)
  28.  {
  29.     HWND hwnd;
  30.     WNDCLASS wc;
  31.     short i;
  32.     RECT r;
  33.         struct WINDOSIO w;
  34.         long l;
  35.     MSG msg;
  36.     char buffer[240];
  37.     char far *p;
  38.  
  39.  
  40.     /* Register Main Window Class */
  41.  
  42.     hInst = hInstance;
  43.  
  44.     if (!hPrevInstance)
  45.      {
  46.         wc.style = 0;
  47.         wc.lpfnWndProc = WndProc;
  48.         wc.cbClsExtra = 0;
  49.         wc.cbWndExtra = 0;
  50.         wc.hInstance = hInstance;
  51.         wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
  52.         wc.hCursor = LoadCursor( 0, IDC_ARROW );
  53.         wc.hbrBackground = COLOR_WINDOW + 1;
  54.         wc.lpszMenuName = "Example1";
  55.         wc.lpszClassName = "Example1";
  56.         RegisterClass( &wc );
  57.      }
  58.  
  59.  
  60.     /* Initialize terminal IO */
  61.     WinDosIO(WD_INIT,hInstance,0);
  62.  
  63.     /* Create Main Window */
  64.     hwnd = CreateWindow(
  65.                 "Example1",
  66.                 "Counting to a Million",
  67.                 WS_OVERLAPPEDWINDOW,
  68.                 CW_USEDEFAULT,
  69.                 0,
  70.                 CW_USEDEFAULT,
  71.                 0,
  72.                 0,
  73.                 0,
  74.                 hInstance,
  75.                 NULL
  76.                 );
  77.  
  78.     ShowWindow(hwnd, cmdshow);
  79.  
  80.     /* Wrap width for small windows */
  81.     w.wrapWidth = 12;
  82.  
  83.     /* Create 5 buttons and 5 associated counting windows */
  84.     for (i = 0; i < 5; i++)
  85.      {
  86.       r.top = 130;
  87.       r.left = 10 + (i * 140);
  88.       handle[i] = CreateWindow("termIO",0,
  89.               WS_CHILD | WDS_NOPAGES | WDS_NOTEXTBUFFER,
  90.                r.left,r.top,70,60,
  91.               hwnd,i+50,hInstance,(LPSTR)&w);
  92.       textcolor(i + 10);
  93.       ShowWindow(handle[i],SW_SHOW);
  94.       UpdateWindow(handle[i]);
  95.  
  96.       r.top = 18;
  97.       r.left = 25 + (i * 140);
  98.  
  99.       button[i] =  CreateWindow("termIO",0,
  100.               WS_CHILD | WDS_SELECT | WDS_NOPAGES,
  101.                r.left,r.top,40,38,
  102.               hwnd,i,hInstance,(LPSTR)&w);
  103.       textcolor(i + 10);
  104.       ShowWindow(button[i],SW_SHOW);
  105.       UpdateWindow(button[i]);
  106.       printf("╔═══╗\n");
  107.       printf("║ %d ║\n",i+1);
  108.       printf("╚═══╝");
  109.     }
  110.  
  111.     /* Create ID and Password window */
  112.     r.top = 200;
  113.     r.left = 10;
  114.     idWindow = CreateWindow("termIO","ID and Password",
  115.               WS_CHILD | WS_THICKFRAME | WS_CAPTION |
  116.               WDS_SELECT | WDS_NOPAGES,
  117.               r.left,r.top,290,100,
  118.               hwnd,20,hInstance,0);
  119.     textcolor(WHITE);
  120.     ShowWindow(idWindow,SW_SHOW);
  121.     UpdateWindow(idWindow);
  122.  
  123.     /* Get info from user */
  124.     printf("Enter ID ? ");
  125.     gets(buffer);
  126.  
  127.     _setcursortype(_NOCURSOR);
  128.     p = getpass("Enter password:");
  129.     printf("The password is '%s'\n",p);
  130.  
  131.  
  132.     _setcursortype(_SOLIDCURSOR);
  133.     printf("Hit any key to continue\n");
  134.     getche();
  135.  
  136.     ShowWindow(idWindow,SW_HIDE);
  137.     UpdateWindow(idWindow);
  138.  
  139.     /* Loop through the windows while counting to a million,
  140.        using the timer to change windows.
  141.     */
  142.     currentHandle = 4;
  143.     WinDosIO(WD_SELECT,handle[currentHandle],0);
  144.     SetTimer(hwnd,1,500,0);
  145.     for (l = 0; l < 1000000L; l++)
  146.       if (printf("%ld\n",l) < 0) break;
  147.  
  148.     KillTimer(hwnd,1);
  149.  
  150.     while( GetMessage( &msg, 0, 0, 0 ) != 0 )
  151.          {
  152.         TranslateMessage( &msg );
  153.         DispatchMessage( &msg );
  154.          }
  155.  
  156.     return 0;
  157.  }
  158.  
  159.  
  160. long far pascal WndProc(HWND hwnd, WORD msg, WORD wParam, LONG lParam)
  161.  {
  162.     short i;
  163.     short nCode;
  164.  
  165.     switch( msg )
  166.         {
  167.     case WM_TIMER:
  168.         if (++ticks >= 36)
  169.          {
  170.             WinDosIO(WD_SELECT,handle[currentHandle],0);
  171.             currentHandle = ++currentHandle % 5;
  172.             ticks = 0;
  173.          }
  174.         break;
  175.     case WM_COMMAND:
  176.         nCode = HIWORD(lParam);
  177.         switch (nCode)
  178.          {
  179.             case WDN_LBUTTON:
  180.               for (i = 0; i < 5; i++)
  181.                {
  182.                 if (wParam == i)
  183.                  {
  184.                     currentHandle = i;
  185.                     WinDosIO(WD_SELECT,
  186.                         handle[currentHandle],0);
  187.                     ticks = 0;
  188.                     break;
  189.                  }
  190.                }
  191.          }
  192.         break;
  193.     case WM_SETFOCUS:
  194.         WinDosIO(WD_SETFOCUS,0,0);
  195.         break;
  196.     case WM_CLOSE:
  197.             WinDosIO(WD_DESTROY,hwnd,0);
  198.         return 0;
  199.         case WM_DESTROY:
  200.         PostQuitMessage(0);
  201.             return 0;
  202.         }
  203.  
  204.     return DefWindowProc(hwnd,msg,wParam,lParam);
  205. }
  206.  
  207.  
  208.